<?php
/*
 * CHARGEMENT D'UN XML ET IMPORTATION DANS LA BASE DE DONNEES
* */
session_start();
$_SESSION['valide'] = true;
include_once 'connect.php';

//Création d'un objet DOMDocument
$xml = new DOMDocument('1.0', 'utf-8');
$xml->validateOnParse = true; //Valider au chargement du fichier

//Vérification de la validitée du fichier
try{
	set_error_handler('HandleXmlError');
	$xml->loadXML(file_get_contents($_FILES['importfile']['tmp_name']));
	restore_error_handler();

	$genre = str_pad($xml->getElementsByTagName("genre")->item(0)->nodeValue,51 , " ");


	//Vérifie s'il y a un genre
	$sql = "SELECT * FROM genres WHERE TRIM(nom_genre) = TRIM(\"$genre\");";
	$verifGenre = $connexion->prepare($sql);
	$verifGenre->execute();
	$test = $verifGenre->fetch();

	//S'il n'y a pas de genre, le créer
	if($test === FALSE){
		$sql = "INSERT INTO genres (nom_genre) VALUES (\"$genre\");";
		$connexion->query($sql);
		$idgenre = $connexion->lastInsertId();
	}
	else {
		echo "le genre existe </br>";
		$idgenre = $test['code_genre'];
	}

	$films =$xml->getElementsByTagName("film");

	//Ajout des films
	foreach ( $films as $film){
		//Si le réalisateur n'existe pas, l'ajouter
		$nr = str_pad($film->getElementsByTagName("nom")->item(0)->nodeValue,20 , " ");
		$pnr = str_pad($film->getElementsByTagName("prenom")->item(0)->nodeValue,20 , " ");
		$natr = str_pad($film->getElementsByTagName("nationalite")->item(0)->nodeValue,20 , " ");
		$dnr = $film->getElementsByTagName("dateNaissance")->item(0)->nodeValue;
		$dmr = $film->getElementsByTagName("dateMort")->item(0)->nodeValue;

		$sql = "SELECT * FROM individus WHERE TRIM(nom) = TRIM(\"$nr\") AND TRIM(prenom) = TRIM(\"$pnr\") AND date_naiss = $dnr;";
		$verifRealisateur = $connexion->prepare($sql);
		$verifRealisateur->execute();
		$test = $verifRealisateur->fetch();

		//S'il n'y a pas de réalisateur, le créer
		if($test === FALSE){
			$sql = "INSERT INTO individus (nom, prenom, nationalite, date_naiss, date_mort) VALUES (\"$nr\", \"$pnr\", $dnr, $dmr);";
			$connexion->query($sql);

			$realisateurid = $connexion->lastInsertId();
		}
		else {
			$realisateurid = $test['code_indiv'];
		}

		//Ajouter le film
		$tf = str_pad($film->getElementsByTagName("titreFrancais")->item(0)->nodeValue,51 , " ");
		$to = str_pad($film->getElementsByTagName("titreOriginale")->item(0)->nodeValue,50 , " ");
		$pays = str_pad($film->getElementsByTagName("pays")->item(0)->nodeValue,20 , " ");
		$date = $film->getElementsByTagName("date")->item(0)->nodeValue;
		$duree = $film->getElementsByTagName("duree")->item(0)->nodeValue;
		$couleur = str_pad($film->getElementsByTagName("couleur")->item(0)->nodeValue,10 , " ");
		$image = str_pad($film->getElementsByTagName("image")->item(0)->nodeValue,20 , " ");

		$sql = "SELECT * FROM films WHERE TRIM(titre_original) = TRIM(\"$to\") AND TRIM(titre_francais) = TRIM(\"$tf\") AND date = $date;";
		$verifFilm = $connexion->prepare($sql);
		$verifFilm->execute();
		$test = $verifFilm->fetch();

		$idFilm = 0;
		//S'il n'y a pas de film, le créer
		if($test === FALSE){
			$sql = "INSERT INTO films (titre_original, titre_francais, pays, date, duree, couleur, realisateur, image) VALUES (\"$to\",\"$tf\",\"$pays\", $date, $duree,\"$couleur\" , ".$realisateurid.", \"$image\") ;";
			try{
				$connexion->exec($sql);
				$idFilm = $connexion->lastInsertId();
			}
			catch (PDOException $e){
				echo $e->getMessage();
			}


			//Liaison du genre au film
			$sql = "INSERT INTO classification VALUES (".$connexion->lastInsertId().", $idgenre); ";
			try{
				$connexion->exec($sql);
			}
			catch (PDOException $e){
				echo $e->getMessage();
			}
		}

		//Ajout des individus
		if($idFilm != 0){
			foreach ($film->getElementsByTagName("acteur") as $acteur) {
				//Vérification de l'existence de l'individu
				$pa = $acteur->getElementsByTagName("prenom")->item(0)->nodeValue;
				$na = $acteur->getElementsByTagName("nom")->item(0)->nodeValue;
				$nna = $acteur->getElementsByTagName("nationalite")->item(0)->nodeValue;
				$dna = $acteur->getElementsByTagName("dateNaissance")->item(0)->nodeValue;
				$dma = $acteur->getElementsByTagName("dateMort")->item(0)->nodeValue;
					
				$sql = "SELECT * FROM individus WHERE TRIM(nom) = TRIM(\"$na\") AND TRIM(prenom) = TRIM(\"$pa\") AND date_naiss = $dna AND date_mort = $dma AND TRIM(nationalite) = TRIM(\"$nna\");";
				$verifActeur = $connexion->prepare($sql);
				$verifActeur->execute();
				$test = $verifActeur->fetch();
					
				//S'il n'y a pas de personne correspondante, la créer
				if($test === FALSE){
					$sql = "INSERT INTO individus (nom, prenom, nationalite, date_naiss, date_mort) VALUES (\"$na\",\"$pa\",\"$nna\", $dna, $dma) ;";
					try{
						$connexion->exec($sql);
						$indivId = $connexion->lastInsertId();
					}
					catch (PDOException $e){
						echo $e->getMessage();
					}
				}
				else {
					$indivId= $test['code_indiv'];
				}

				//Ajout des acteurs
				$sql = "INSERT INTO acteurs  VALUES ( $idFilm, $indivId) ;";
				try{
					$connexion->exec($sql);
					$indivId = $connexion->lastInsertId();
				}
				catch (PDOException $e){
					echo $e->getMessage();
				}
			}
		}

		
	}
	
}
catch (DOMException $e) {
	$_SESSION['valide'] = false;
	echo "erreur";
}
echo "sorti";
header('Location: ../index.php');
exit;

//Vérification d'une erreur pour
function HandleXmlError($errno, $errstr, $errfile, $errline)
{
	if ($errno==E_WARNING && (substr_count($errstr,"DOMDocument::loadXML()")>0))
	{
		throw new DOMException($errstr);
	}
	else
	return false;
}
?>